# This is a unified GNU Makfefile for all "other" targets - type "make"
# to get a list of targets!

# Perl variables
# Use make linux UOXPERL=1, and change the PERLXS_DIR below,
# to enable perl extensions.
ifeq ($(UOXPERL),1)
PERLXS_DIR=/opt/perl/lib/5.00503/i686-linux/CORE
PERL_LIBS=-lcrypt -L$(PERLXS_DIR) -lperl
PERL_CFLAGS=-I$(PERLXS_DIR) -DUOXPERL
PERL_OBJS=uoxperl/main.o uoxperl/UOX/UOX.o
PERL_SRCS=uoxperl/main.cpp uoxperl/Makefile uoxperl/UOX/UOX.xs uoxperl/UOX/Makefile.PL
endif

DBINC=-I/usr/local/BerkeleyDB/include
DBLIB=/usr/local/BerkeleyDB/lib/libdb.a

ifeq ($(TARGET),linux)
CC = g++
# experimental linux UOXPERL support - uncomment to disable
UOXPERL=1
LIBS = -lm $(PERL_LIBS)
else
ifeq ($(TARGET),egcs)
CC = egcs
LIBS = -lm $(PERL_LIBS)
else
ifeq ($(TARGET),mingw32)
CC = gcc
LIBS = -lwsock32 $(PERL_LIBS)
else
ifeq ($(TARGET),cross)
CC=gnuwin32gcc
LIBS = -lwsock32 $(PERL_LIBS) 
endif
endif
endif
endif			

# Optimization
OPT = -O2

# Name of executable
EXE = uox3.exe

# Debugging
DEBUG = -g

LDFLAGS = -export-dynamic $(DBLIB)

# Warning level
WARN = -w

# Other c-flags
OTHER = -funsigned-char -fconserve-space

# Source
SRC := $(wildcard *.cpp)

# Objects
OBJS := $(patsubst %.cpp, %.o, $(SRC))

C_FLAGS = $(WARN) $(OTHER) $(OPT) $(DEBUG) $(PERL_CFLAGS)

all:
	@echo Please specify one of the following:
	@echo -------------------------------------------------------------------
	@echo make mingw32            - Compile native Win32 binary usign mingw32
	@echo make cross              - Cross compile Win32 binary on Linux
	@echo make linux              - Compile Linux/UNIX binary
	@echo make egcs               - As above, but using egcs - for Redhat!

mingw32:
	$(MAKE) $(EXE) TARGET=mingw32 UOXPERL=$(UOXPERL)

cross:
	$(MAKE) $(EXE) TARGET=cross UOXPERL=$(UOXPERL)

# "CC=gnuwin32gcc"

linux:
	$(MAKE) uox3 EXE=uox3 TARGET=linux UOXPERL=$(UOXPERL)

# "LIBS=-lm"

egcs:
	$(MAKE) uox3 EXE=uox3 TARGET=egcs UOXPERL=$(UOXPERL)


# "LIBS=-lm" "CC=egcs"


$(EXE): $(OBJS) $(PERL_SRCS)
ifdef PERL_OBJS
	$(MAKE) -C uoxperl PERLXS_DIR=$(PERLXS_DIR)
endif
	$(CC) -o $@ $(OBJS) $(PERL_OBJS) $(LDFLAGS) $(DBINC) $(LIBS)

%.o: %.cpp uox3.h
	$(CC) -c $(C_FLAGS) $(DBINC) $< -o $@

clean:
	rm -f *.o uox3
ifdef UOXPERL
	$(MAKE) -C uoxperl clean
endif

tags:
	ctag *.cpp *.h

run:
	./uox3



